/**
 * 判断数据是否为字符串类型
 *
 * @param data 任意数据
 * @returns {data is string} 传入的数据是否为字符串类型，true: 是，false: 否
 */
export const isStr = (data: any): data is string => typeof data === 'string'


/**
 * 判断字符串是否为空字符串
 *
 * @param str 需要进行判断的字符串
 * @return {boolean} true: 空字符串，false: 非空字符串
 */
export const isEmptyStr = (str: string): str is '' => isStr(str) && str.length === 0


/**
 * 获取字符串在 UTF-8 编码下的字节大小
 *
 * @param str 要获取字节大小的字符串
 * @return {number} 指定字符串在 UTF-8 编码下的字节大小
 */
export const getStrUtf8ByteSize = (str: string): number => {
  // 字符串为空字符串，字节大小为 0
  if (isEmptyStr(str)) return 0
  // 可以将字符串采用 UTF-8 编码进行编码的编码器
  const encoder = new TextEncoder();
  // 将字符串编码为 Uint8Array（由 8 位无符号整数组成的数组，UTF-8 字节数组）
  const strEncoded = encoder.encode(str);
  // 返回字符串在 UTF-8 编码下的字节大小
  return strEncoded.length;
}
